package com.example.ai_basedintelligentdiagnosisandtreatmentofchildren.activity;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.ViewModelProvider;

import com.example.ai_basedintelligentdiagnosisandtreatmentofchildren.activity.doctor.ActivityHomeDoctor;
import com.example.ai_basedintelligentdiagnosisandtreatmentofchildren.activity.parent.ActivityHomeParent;
import com.example.ai_basedintelligentdiagnosisandtreatmentofchildren.databinding.ActivityLoginBinding;
import com.example.ai_basedintelligentdiagnosisandtreatmentofchildren.model.UserViewModel;
import com.example.ai_basedintelligentdiagnosisandtreatmentofchildren.utils.GlobalViewModelStore;
import com.example.ai_basedintelligentdiagnosisandtreatmentofchildren.utils.MyApplication;
import com.example.ai_basedintelligentdiagnosisandtreatmentofchildren.viewmodel.LoginViewModel;

// 登录界面的 Activity 类，负责处理界面展示和用户交互
public class ActivityLogin extends AppCompatActivity {

    private ActivityLoginBinding binding;
    // 声明 LoginViewModel 实例，用于处理登录逻辑和数据管理
    private LoginViewModel viewModel;
    private UserViewModel userViewModel;

    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 启用 EdgeToEdge 模式，让界面延伸到系统栏
        EdgeToEdge.enable(this);
        // 使用 DataBinding 方式初始化
        binding = ActivityLoginBinding.inflate(getLayoutInflater());
        // 设置当前 Activity 的布局文件
        setContentView(binding.getRoot());
        // 为登录界面的根视图设置窗口插入监听器，根据系统栏的位置调整布局内边距
        ViewCompat.setOnApplyWindowInsetsListener(binding.getRoot(), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

        // 通过 ViewModelProvider 获取 LoginViewModel 实例
        viewModel = new ViewModelProvider(this).get(LoginViewModel.class);
        // 初始化界面视图组件
        viewModel.initViews(this);

        setUserViewModel();
        // 设置界面组件的点击监听器
        setupClickListeners();
    }

    // 设置界面组件点击监听器的方法，为各个按钮和文本组件设置点击事件
    private void setupClickListeners() {
        // 为家长登录按钮设置点击监听器，点击时执行登录操作
        viewModel.btnParentLogin.getValue().setOnClickListener(v -> performLogin("parent"));
        // 为医生登录按钮设置点击监听器，点击时执行登录操作
        viewModel.btnDoctorLogin.getValue().setOnClickListener(v -> performLogin("doctor"));
        // 为忘记密码文本组件设置点击监听器，点击时跳转到忘记密码界面
        viewModel.tevForgetPassword.getValue().setOnClickListener(v -> navigateToForgetPassword());
        // 为注册账号文本组件设置点击监听器，点击时跳转到注册界面
        viewModel.tevRegisterAccount.getValue().setOnClickListener(v -> navigateToRegister());
    }

    // 执行登录操作的方法，接收角色作为参数
    private void performLogin(String role) {
        // 调用 ViewModel 的 loginAsync 方法进行异步登录操作，并传入登录结果监听器
        viewModel.loginAsync(role, (isSuccess, errorMessage) -> {
            // 如果登录成功，跳转到相应的主页
            if (isSuccess) {
                // 在任何需要使用 UserViewModel 的地方
                userViewModel = GlobalViewModelStore.getInstance(MyApplication.getInstance())
                        .get(UserViewModel.class);
                userViewModel.setUserType(role);
                navigateToHome(role);
            } else {
                // 如果登录失败，显示错误信息的 Toast
                showToast(errorMessage);
            }
        });
    }

    private void setUserViewModel(){
        //用户身份
        // 获取全局共享的 UserViewModel
        userViewModel = GlobalViewModelStore
                .getInstance(MyApplication.getInstance())
                .get(UserViewModel.class);
        //
        userViewModel.setUserType("doctor");
    }

    // 跳转到主页的方法，根据角色决定跳转到家长主页还是医生主页
    private void navigateToHome(String role) {
        // 根据角色选择目标 Activity 类
        Class<?> targetActivity = "parent".equals(role) ? ActivityHomeParent.class : ActivityHomeDoctor.class;
        // 创建一个 Intent 对象，用于启动目标 Activity
        Intent intent = new Intent(ActivityLogin.this, targetActivity);
        // 启动目标 Activity
        startActivity(intent);
    }

    // 跳转到忘记密码界面的方法
    private void navigateToForgetPassword() {
        // 创建一个 Intent 对象，用于启动忘记密码界面的 Activity
        Intent intent = new Intent(ActivityLogin.this, ActivityForgetPassword.class);
        // 启动忘记密码界面的 Activity
        startActivity(intent);
    }

    // 跳转到注册界面的方法
    private void navigateToRegister() {
        // 创建一个 Intent 对象，用于启动注册界面的 Activity
        Intent intent = new Intent(ActivityLogin.this, ActivityRegister.class);
        // 启动注册界面的 Activity
        startActivity(intent);
    }

    // 显示 Toast 消息的方法，接收消息内容作为参数
    private void showToast(String message) {
        // 创建并显示一个 Toast 消息，持续时间为短时间
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
    }
}